Memory controllers comprising circuits, software, or a combination of both, are used to provide access to a memory. Here we use “memory” in a broad sense to include, without limitation, one or more of various integrated circuits, components, modules, systems, etc. A memory controller generally receives and services requests from a “client”—for example a processor, peripheral device, operating system or application program—to access a memory. Such requests often require reading or writing data from/to a memory coupled to the controller.